/*
*	Ivan Concua 12352
*	Roberto Andrino 12413
*	Algoritmos y estructuras de datos
*	StackFactory.java
*	StackFactory crea un objeto de una de las clases que
*	implementan a Stack. Se usa el patron Factory para seleccionar
*	que objeto crear. Se usa el patron Singleton para asegurarse de
*	que solo haya un objeto de cualquier Stack
*/

public class StackFactory<G>
{
	// selecciona la implementacion a usar para una pila
	// se utiliza el patron Factory y Singleton
	
	private static boolean instanceFlag = false;
	
	public Stack<G> getStack(String entry) throws SingletonException
	// seleccion de la implementacion a usar
	{
		if(instanceFlag) // instanceFlag indica si ya existe un Stack
			throw new SingletonException("Error: solo se permite una pila.");
		
		else
		{
			setInstanceFlag();
			
			if(entry.equals("1"))
				return new StackVector<G>();
			
			else
				return new StackArrayList<G>();
		}
	}
	
	public void setInstanceFlag()
	// se llama este metodo despues de que se cree un Stack o una List.
	{
		instanceFlag = true;
	}
}
